package partThree;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

/* 本类用于测试collection接口中的常用方法*/
public class TestCollection {
    public static void main(String[] args) {
        //1.创建Collection相关的对象
        //Collection c = new Collection(); //报错，因为collection是接口
        Collection<Integer> c = new ArrayList();
        Collection<Integer> c1 = new ArrayList<Integer>(); //俩种写法均可，功能一致
        Collection<Integer> c2 = new ArrayList();
        Collection c5 = new ArrayList<Integer>(); //不能写到后边，写到后边约束不了类型，不起作用
        c.add(100);
        c.add(200);
        c.add(300);
        c.add(400);
        c.add(500);
        System.out.println(c);

        c2.add(2);
        c2.add(4);
        c2.add(6);
        c2.add(8);

        //3.测试集合中的常用方法
        System.out.println(c.hashCode()); //获取集合对象对应的哈希码值
        System.out.println(c.toString()); //[100, 200, 300, 400, 500]
        System.out.println(c.equals(200)); //false 比较集合对象与值200是否相等

        System.out.println(c.contains(200)); //true,集合中是否包含指定元素200
        System.out.println(c.isEmpty());  //false，判断集合是否为空
        System.out.println(c.remove(100)); //true,移除集合中的指定元素，成功返回true
        System.out.println(c.toString());//[200, 300, 400, 500]

        System.out.println(c.size());//4,返回集合的元素个数

        Object[] array = c.toArray();//将指定的集合转为数组Object[]
        // 输入c.toArray();，使用alt+enter选择转为Object[] array
        System.out.println(Arrays.toString(array));//[200, 300, 400, 500]
        // 只是类型发生变化，元素没有变化

        //4.测试集合间的操作

        c2.add(2);
        c2.add(3);
        c2.add(4);
        System.out.println(c2);

        c.addAll(c2); //将c2集合的所有元素添加到c集合中
        System.out.println(c);//[200, 300, 400, 500, 2, 3, 4]
        System.out.println(c2);//c2集合不受影响

        System.out.println(c.containsAll(c2));//true 判断集合c2中的所有元素是否被c集合包含
        System.out.println(c.remove(2));//删除c集合中的元素2
        System.out.println(c);
        System.out.println(c.containsAll(c2));//false 集合c2中的2未被c集合包含

        System.out.println(c.removeAll(c2)); //删除c集合中属于c2集合的所有元素
        System.out.println(c);//[200, 300, 400, 500]

        c.add(4);
        System.out.println(c);//[200, 300, 400, 500, 4]
        System.out.println(c.retainAll(c2));//true 取c集合与c2集合的交集，保留其公共元素
        System.out.println(c);//[4]其都有元素4，所以保留公共元素4

               /* 迭代：
           1. 获取集合的迭代器 c2.iterator
           2.利用迭代器进行判断，当前集合中是否有下一个可迭代的元素 it.hasNext()
           3.利用迭代器获取当前迭代的元素 ii.next()*/
        Iterator<Integer> it = c2.iterator(); //获取迭代器
        while (it.hasNext()){ //循环，判断是否有元素可以迭代
            Integer num = it.next();//根据迭代器获取本轮迭代到的元素
            System.out.println(num);//打印获取到的本轮迭代到的集合中的元素
        }
    }
}